home *** CD-ROM | disk | FTP | other *** search
- PROGRAM RFAT
- C
- C TO READ FAT ON DISKETTES IN FLOPPY DRIVES
- C OLYMPIC SOFTWARE -- 9/26/88
- C
- EXTERNAL DBIOS,GETCAD
- INTEGER*2 IAR(7),IES,IBX
- INTEGER*2 IDATA(1024),IFCT(20)
- INTEGER*2 I,I1,J,K,IH(6),IC1,IC2,ID,ID1,ID2
- CHARACTER*1 ICDAT(1024),AB(2)
- CHARACTER*2 AH(8),AC
- EQUIVALENCE (AB(1),AC)
- C
- C*** GET ADDRESS OF ICDAT
- CALL GETCAD(ICDAT,IES,IBX)
- C
- C** RESET DISKETTE SYSTEM
- IAR(1)=0
- CALL DBIOS(IAR,IES,IBX)
- C
- IAR(1)=2
- IAR(2)=2
- C
- WRITE(*,10)
- 10 FORMAT(' ENTER DOS SECTOR #(1 FOR 360K), DRIVE #(0 FOR "A"): ',$)
- READ(*,*)I,IAR(6)
- C
- C** BIOS SECTOR, SIDE, TRACK...
- IAR(4)=1+I-INT(I/9.0)*9
- IAR(5)=(I/9.0)-INT(I/18.0)*2
- IAR(3)=I/(18.0)
- C
- CALL DBIOS(IAR,IES,IBX)
- C
- IF(IAR(7).EQ.1)THEN
- WRITE(*,101)IAR(1)
- 101 FORMAT(' *** DISK ACCESS ERROR ! ',I5)
- GOTO 700
- ENDIF
- C
- DO 29 I=1,1024
- IDATA(I)=ICHAR(ICDAT(I))
- 29 CONTINUE
- C
- DO 30 I=1,1024,8
- I1=I-1
- C
- C** CONVERT TO HEX IN ALPHANUMERIC TERMS
- DO 31 K=1,8
- ID=IDATA(I1+K)
- ID1=ID/16.0
- ID2=ID-ID1*16
- IF(ID1.LT.10)THEN
- AB(1)=CHAR(ID1+48)
- ELSE
- AB(1)=CHAR(ID1+55)
- ENDIF
- IF(ID2.LT.10)THEN
- AB(2)=CHAR(ID2+48)
- ELSE
- AB(2)=CHAR(ID2+55)
- ENDIF
- AH(K)=AC
- 31 CONTINUE
- C
- WRITE(*,20)I1,(IDATA(I1+J),J=1,8),(AH(J),J=1,8)
- 20 FORMAT(1X,I4,5X,8I4,10X,8(A2,1X))
- 30 CONTINUE
- C
- C** DISCRAMBLE FOR FAT
- K=0
- J=-2
- DO 40 I=1,534,3
- J=J+2
- I1=J+1
- IH(1)=IDATA(I)/16.0
- IH(2)=IDATA(I)-IH(1)*16
- IH(3)=IDATA(I+1)/16.0
- IH(4)=IDATA(I+1)-IH(3)*16
- IH(5)=IDATA(I+2)/16.0
- IH(6)=IDATA(I+2)-IH(5)*16
- C
- IC1=IH(2)+IH(1)*16.0+IH(4)*256.0
- IC2=IH(3)+IH(6)*16.0+IH(5)*256.0
- WRITE(*,90)J,IC1,I1,IC2
- 90 FORMAT(3X,'CLUSTER NO. ',I4,' CONTAINS ',I4,' AND CLUSTER NO. ',
- 1 I4,' CONTAINS ',I4)
- C
- C** RECORD FAULTS
- IF(IC1.EQ.4087)THEN
- K=K+1
- IFCT(K)=J
- ENDIF
- IF(IC2.EQ.4087)THEN
- K=K+1
- IFCT(K)=I1
- ENDIF
- C
- 40 CONTINUE
- C
- C** PRINT FAULTS
- IF(K.NE.0)WRITE(*,62)
- 62 FORMAT(/,' BAD CLUSTERS...',/)
- DO 60 I=1,K
- WRITE(*,61)I,IFCT(I)
- 61 FORMAT(1X,2I5)
- 60 CONTINUE
- C
- 700 STOP
- END
-